CFLAGS := -g -Wall -pedantic -ansi -std=c99
LDFLAGS := -g -Wall -pedantic -ansi -std=c99 -lfl
EXEC := compiler

all: $(EXEC)

compiler: lex.yy.o y.tab.o symboles.o instructions.o stack.o loops.o eoutput.o functions.o
	gcc $^ $(LDFLAGS) -o $@

lex.yy.c: lexique.lex
	lex lexique.lex 

lex.yy.o: lex.yy.c y.tab.h win32define.h
	gcc $(CFLAGS) -c $< -o $@

y.tab.h: parseur.y
	yacc -d -v parseur.y -o y.tab.c

y.tab.c: parseur.y
	yacc -v parseur.y -o y.tab.c

y.tab.o: y.tab.c symboles.h stack.h win32define.h
	gcc $(CFLAGS) -c $< -o $@

%.o: %.c %.h win32define.h
	gcc $(CFLAGS) -c $< -o $@

clean:
	rm -f y.tab.c y.tab.h y.output lex.yy.c *.o

mrproper: clean
	rm -f $(EXEC) output.asm